package message_api

import (
	"github.com/gin-gonic/gin"
	"giv-vue-blog/global"
	"giv-vue-blog/models"
	"giv-vue-blog/models/res"
	"giv-vue-blog/utils/jwts"
)

type MessageRecordRequest struct {
	UserID uint `json:"user_id" binding:"required" msg:"请输入查询的用户id"`
}

// MessageRecord 根据用户ID查询消息记录
// @Summary 查询消息记录
// @Description 根据用户ID查询消息记录列表
// @Tags 消息管理
// @Accept json
// @Produce json
// @Param user_id body uint true "用户ID"
// @Success 200 {object} res.Response{}
// @Router /api/msg_record [post]
func (MessageApi) MessageRecord(c *gin.Context) {
	var cr MessageRecordRequest
	err := c.ShouldBindJSON(&cr)
	if err != nil {
		res.FailedWithError(err, &cr, c)
		return
	}
	_claims, _ := c.Get("claims")
	claims := _claims.(*jwts.CustomClaims)
	//从数据库中找到用户发送的对应消息
	var msgList []models.MessageModel
	// TODO:处理当没有对应的数据返回null的问题，这么处理，会返回一个[]切片
	var messageList = make([]models.MessageModel, 0)
	//按最新时间排序消息
	global.DB.Order("created_at asc").
		Find(&msgList, "send_user_id =? or rev_user_id=?", claims.UserID, claims.UserID)
	for _, model := range msgList {
		if model.RevUserID == cr.UserID || model.SendUserID == cr.UserID {
			messageList = append(messageList, model)
		}
	}
	//TODO: 后期处理 点开消息 里面的每一条消息 能从未读变成已读
	res.OkWithData(messageList, c)
}
